package file

import (
	"context"
	"github.com/minio/minio-go/v7"
	"github.com/minio/minio-go/v7/pkg/credentials"
	"log"
	"os"
)

// 初始化客户端
func InitializeClient() *minio.Client {
	//初始化客户端配置
	endpoint := "43.143.123.142:9000"
	addessKeyID := "UA9QsQh2EQN9W69fiNIt"
	secretAccessKey := "ItsZcKVatsxokvKRaMGIljMJfpHQOoNSp0rAbe7m"
	MinioClient, err := minio.New(endpoint, &minio.Options{
		Creds: credentials.NewStaticV4(addessKeyID, secretAccessKey, ""),
	})
	if err != nil {
		log.Fatalln("创建 Minio 客户端失败", err)
		return nil
	}
	log.Printf("创建 Minio 客户端成功")
	return MinioClient
}

// 文件上传
func NewFileUpload(bucket string, filePath string) error {
	//打开文件
	file, err := os.Open(filePath)
	if err != nil {
		log.Fatalln("文件打开失败", err)
		return err
	}
	defer file.Close()
	//获取文件大小
	fileInfo, err := file.Stat()
	if err != nil {
		log.Fatalln("文件获取失败", err)
		return err
	}

	//初始化Minio客户端
	initializeFile := InitializeClient()
	//上下文
	ctx := context.Background()
	// 创建一个叫 mybucket 的存储桶。
	bucketName := bucket
	location := "beijing"
	err = initializeFile.MakeBucket(ctx, bucketName, minio.MakeBucketOptions{Region: location})
	if err != nil {
		// 检查存储桶是否已经存在。
		exists, err := initializeFile.BucketExists(ctx, bucketName)
		if err == nil && exists {
			log.Printf("存储桶 %s 已经存在", bucketName)
		} else {
			log.Fatalln("查询存储桶状态异常", err)
		}
	}
	log.Printf("创建存储桶 %s 成功", bucketName)

	//文件上传到桶
	objectName := filePath

	// 调用 FPutObject 接口上传文件。
	_, err = initializeFile.PutObject(ctx, bucketName, objectName, file, fileInfo.Size(), minio.PutObjectOptions{})
	if err != nil {
		log.Fatalln("文件上传桶失败", err)
	}
	log.Printf("上传文件 %s 成功\n", objectName)
	return err
}
